package com.bgds.sys.api.service;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.bgds.sys.api.bean.mars.vo.WaveDataVO;
import com.bgds.sys.api.bean.mos.dto.*;

import java.util.List;

/**
 * @Author: warm
 * @Description:
 * @Date: 2020/7/29 14:30
 * @Version: 1.0
 */
public interface RongZhiService {

    /**
     * 获取设备树
     * @return
     */
    List<MosDeviceDto> getMosDevicesTree();

    /**
     * 获取所有设备
     * @return
     */
    List<MosDeviceDto> getAllAssets();

    /**
     * 获取测量定义趋势数据
     * @param measfId 测量定义ID（资产中type=10,11的为测量定义）
     * @param minDate
     * @param maxDate
     * @param limit
     * @return
     */
    List<VibdatasDto> getVibdatasByParams(String measfId, String minDate, String maxDate, Integer limit);

    /**
     * 获取原始波形
     * @param waveKey 测量定义 波形数据key 唯一标识
     * @return
     *
     */
    List<Float> getOriginalWave(String waveKey);


    /**
     * 通道温度
     * @param pointId 测点ID
     * @param minDate 开始时间
     * @param maxDate 结束时间
     * @param limit 返回的数量限制,limit 一次最多返回2000条
     * @return
     */
    TechniqueDto getChTemperatures(String pointId, String minDate, String maxDate, Integer limit);

    /**
     *  频谱
     * @param waveKey 测量定义 波形数据key 唯一标识
     * @return
     *  http://127.0.0.1:8125/api/EPMMOS/Spectrum/{WKey}
     */
    List<WaveDataVO> getSpectrumByWaveKey(String waveKey);

    /**
     * 倒谱
     * @param waveKey 测量定义 波形数据key 唯一标识
     * @return
     *  http://127.0.0.1:8125/api/EPMMOS/Cepstrum/{WKey}
     */
    List<WaveDataVO> getCepstrumByWaveKey(String waveKey);

    /**
     * 包络谱
     * @param waveKey 测量定义 波形数据key 唯一标识
     * @param centerRate (必填):中心频率
     * @param bindWidth (必填):带宽
     * @param widthRate (必填):带宽倍数
     * @return
     * http://127.0.0.1:8125/api/EPMMOS/Envolope/{WKey}/{CenterRate}/{BindWidth}/{WidthRate}
     */
    List<WaveDataVO> getEnvolopeByWaveKey(String waveKey, Integer centerRate, Integer bindWidth, Integer widthRate);


    /**
     * 振动波形
     * @param waveKey 测量定义 波形数据key 唯一标识
     * @return
     *  http://127.0.0.1:8125/api/EPMMOS/VibWave/{WKey}
     */
    List<WaveDataVO> getVibWaveByWaveKey(String waveKey);

    /**
     * 获取设备或测点最新的采集数据
     * @param deviceIdOrPointId 设备或监测点id
     * @param dateType 采集的数据类型,字符串类型,可是"vib"(振动)或者"temp"(温度),不支持其他类型
     * @return
     *
     * http://127.0.0.1:8125/api/EPMMOS/GetLastMeasurement/{DeviceIdOrPointId}/{DataType}
     */
    List<JSONObject> getLastMeasurement(String deviceIdOrPointId, String dateType);

    /**
     *  获取设备时间区间内的振动读数 开始时间和结束时间距离不能超过1天 最大限制2000条
     * @param deviceId
     * @param minDate 开始时间
     * @param maxDate 结束时间

     * @return
     * http://127.0.0.1:8125/api/EPMMOS/GetMeasurementByPeriod/{DeviceId}?MinDate={MinDate}&MaxDate={MaxDate}
     */
    MeasurementDto getMeasurementByPeriod(String deviceId, String minDate, String maxDate);


    /**
     *  获取振动采样值指标趋势数据
     * @param pointId ：测点ID
     * @param indexCode ：指标编码
     * @param minDate :开始时间
     * @param maxDate ：结束时间
     * @return
     * http://127.0.0.1:8125/api/EPMMOS/VibSamplingDatas/{PointID}/{indexCode}?MinDate={MinDate}&MaxDate={MaxDate}
     */
   VibSamplingDataDto getVibSamplingDatas(String pointId, String indexCode, String minDate, String maxDate);

    /**工艺数据
     *
     * @param assetid 测点ID
     * @param isOriginalData 是否是取原始数据 0-否 1-是，时间间隔不得大于2天，当获取原始数据数据比较所以建议按照小时或者天获取
     * @param minDate 开始时间
     * @param maxDate 结束时间
     * @return
     */
   TechniqueDto getTsDatas(String assetid, Integer isOriginalData, String minDate, String maxDate);


    /**
     * 获取报警事件列表
     * @param minDate 开始时间
     * @param maxDate 结束时间
     * @return
     */
   List<AlarmEventDto> getAlarmEvents(String minDate, String maxDate);

    /**
     * 报警事件获取报警详情
     * @param eventId 报警事件ID
     * @return
     */
   AlarmEventDeatil getAlarmEventDetail(String eventId);

    /**
     * 时间范围获取报警详情列表
     * @param minDate
     * @param maxDate
     * @return
     */
    List<AlarmEventDeatil> getAlarmEventDetais(String minDate, String maxDate);
}
